/**
 * \file check.h
 * \version 0.25
 *
 * Contient toutes les fonctions permettant de vérifier la validité d'une entrée de l'utilisateur : un seul même chiffre sur une ligne, sur une colonne et dans un carré
 * Ne contient pas l'algorithme de résolution d'une grille
 */

#ifndef CHECK__H__
#define CHECK__H__

#include "grille.h"

/**
 * \brief Vérifie la validité de la ligne pour la case d'index i
 * \param g Grille de jeu
 * \param index l'index de la case
 * \return 1 si valide, 0 sinon
 */
unsigned char CBoxRowIndex(grille g, unsigned char index);

/**
 * \brief Vérifie la validité de la ligne pour la case (x,y)
 * \param g Grille de jeu
 * \param x Abscisse de la case
 * \param y Ordonnée de la case
 * \return 1 si valide, 0 sinon
 */
unsigned char CBoxRow(grille g, unsigned char x, unsigned char y);

/**
 * \brief Vérifie la validité de la colonne pour la case d'index i
 * \param g Grille de jeu
 * \param index l'index de la case
 * \return 1 si valide, 0 sinon
 */
unsigned char CBoxColIndex(grille g, unsigned char index);

/**
 * \brief Vérifie la validité de la colonne pour la case (x,y)
 * \param g Grille de jeu
 * \param x Abscisse de la case
 * \param y Ordonnée de la case
 * \return 1 si valide, 0 sinon
 */
unsigned char CBoxCol(grille g, unsigned char x, unsigned char y);

/**
 * \brief Vérifie la validité de la zone pour la case d'index i
 * \param g Grille de jeu
 * \param index l'index de la case
 * \return 1 si valide, 0 sinon
 */
unsigned char CBoxSquareIndex(grille g, unsigned char index);

/**
 * \brief Vérifie la validité de la zone pour la case (x,y)
 * \param g Grille de jeu
 * \param x Abscisse de la case
 * \param y Ordonnée de la case
 * \return 1 si valide, 0 sinon
 */
unsigned char CBoxSquare(grille g, unsigned char x, unsigned char y);

/**
 * \brief Vérifie la validité de tous les points de vue pour la case d'index i
 * \param g Grille de jeu
 * \param index l'index de la case
 * \return 1 si valide, 0 sinon
 */
unsigned char CBoxAll(grille g, unsigned char x, unsigned char y);

/**
 * \brief Vérifie la validité de tous les points de vue pour la case (x,y)
 * \param g Grille de jeu
 * \param x Abscisse de la case
 * \param y Ordonnée de la case
 * \return 1 si valide, 0 sinon
 */
unsigned char CBoxAllIndex(grille g, unsigned char i);

/**
 * \brief Vérifie la validité de tous les points de vue de la case courrante
 * \param g Grille de jeu
 * \return 1 si valide, 0 sinon
 */
unsigned char CCurrentBox(grille g);

/**
 * \brief Vérifie la validité de toute une ligne
 * \param g Grille de jeu
 * \param rowNb le numéro de la ligne [1-9]
 * \return 1 si valide, 0 sinon
 */
unsigned char CRow(grille g, unsigned char rowNb);

/**
 * \brief Vérifie la validité de toute une colonne
 * \param g Grille de jeu
 * \param colNb le numéro de la ligne [1-9]
 * \return 1 si valide, 0 sinon
 */
unsigned char CCol(grille g, unsigned char colNb);

/**
 * \brief Vérifie la validité de toute une zone
 * \param g Grille de jeu
 * \param squareNb le numéro de la ligne [1-9]
 * \return 1 si valide, 0 sinon
 */
unsigned char CSquare(grille g, unsigned char squareNb);

/**
 * \brief Vérifie la validité de toute la grille
 * \param g Grille de jeu
 * \return 1 si valide, 0 sinon
 */
unsigned char CAll(grille g);

#endif

